import WebpackLicense from '@components/WebpackLicense';

<WebpackLicense from="https://webpack.docschina.org/configuration/node/" />

# Node

全局变量：该选项可以配置是否 polyfill 或 mock 某些 [Node.js 全局变量](https://nodejs.org/docs/latest/api/globals.html)。

## node.global

- **类型：** `boolean | 'warn'`
- **默认值：** `'warn'`

控制 Rspack 在为非 Node 环境打包时，是否需要为 Node.js 的 `global` 对象提供 polyfill。

关于该对象的具体行为，请参考 [Node.js 文档](https://nodejs.org/api/globals.html#globals_global)。

可选值有：

- `true`：Rspack 会注入 polyfill，使打包产物中能够使用 `global`。适用于依赖 Node.js 全局变量、但运行在非 Node 环境的代码。
- `false`：不注入 polyfill。对 `global` 的引用将保持原样。如果目标环境不支持 `global`，运行时会抛出 `ReferenceError`。
- `'warn'`：行为与 `true` 相同，会注入 polyfill，同时在使用 `global` 时额外打印警告。

例如，禁用 `global` polyfill：

```js title="rspack.config.mjs"
export default {
  node: {
    global: false,
  },
};
```

## node.\_\_filename

- **类型：** `boolean | 'mock' | 'warn-mock' | 'eval-only'`
- **默认值：** `'warn-mock'`，当启用 [output.module](/config/output#outputmodule) 时为 `'node-module'`

控制 Rspack 在为非 Node 环境打包时，如何处理 Node.js 的 [`__filename`](https://nodejs.org/api/modules.html#__filename) 变量。

可选值有：

- `true`：输入文件的文件名，是相对于 [`context`](/config/context) 选项。
- `false`：Rspack 不会更改 `__filename` 的代码。在 Node.js 环境中运行时输出文件的文件名。
- `'mock'`：固定值为 '/index.js'。
- `'warn-mock'`：使用固定值 '/index.js'，但会发出警告。
- `'node-module'`：当 `output.module` 启用时，将 CommonJS 模块中的 `__filename` 替换为 `fileURLToPath(import.meta.url)`。
- `'eval-only'`：等同于 `false`。

例如，不对 `__filename` 进行任何处理：

```js title="rspack.config.mjs"
export default {
  node: {
    __filename: false,
  },
};
```

## node.\_\_dirname

- **类型：** `boolean | 'mock' | 'warn-mock' | 'eval-only'`
- **默认值：** `'warn-mock'`，当启用 [output.module](/config/output#outputmodule) 时为 `'node-module'`

控制 Rspack 在为非 Node 环境打包时，如何处理 Node.js 的 [`__dirname`](https://nodejs.org/api/modules.html#__dirname) 变量。

可选值有：

- `true`：**输入** 文件的目录名，是相对于 [`context`](/config/context) 选项。
- `false`：Rspack 不会更改 `__dirname` 的代码，这意味着你有常规 Node.js 中的 `__dirname` 的行为。在 Node.js 环境中运行时，**输出** 文件的目录名。
- `'mock'`：value 填充为 `'/'`。
- `'warn-mock'`：使用 `'/'` 但是会显示一个警告。
- `'node-module'`: 当启用 `output.module` 时，将 CommonJS 模块中的 `__dirname` 替换为 `fileURLToPath(import.meta.url + "/..")`。
- `'eval-only'`：等同于 `false`。

例如，不对 `__dirname` 进行任何处理：

```js title="rspack.config.mjs"
export default {
  node: {
    __dirname: false,
  },
};
```
